using System.Globalization;

namespace MauiBuilder.Converters
{
    /// <summary>
    /// 日志项背景色转换器
    /// 根据项的索引位置返回不同的背景色，实现交替显示效果
    /// </summary>
    public class LogItemBackgroundConverter : IValueConverter
    {
        // 偶数行背景色（使用白色）
        private static readonly Color EvenRowColor = Colors.White;
        
        // 奇数行背景色（使用浅蓝色，基于主色#3498db的浅色版本）
        private static readonly Color OddRowColor = Color.FromArgb("#e8f4f8");

        /// <summary>
        /// 将值转换为背景色
        /// </summary>
        /// <param name="value">绑定的值（SocketLogMessage对象）</param>
        /// <param name="targetType">目标类型</param>
        /// <param name="parameter">转换参数</param>
        /// <param name="culture">区域性信息</param>
        /// <returns>背景色</returns>
        public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
        {
            try
            {
                // 通过消息ID的哈希值来决定背景色
                if (value?.GetType().GetProperty("Id")?.GetValue(value) is string id)
                {
                    // 使用ID的哈希值来决定背景色
                    return Math.Abs(id.GetHashCode()) % 2 == 0 ? EvenRowColor : OddRowColor;
                }
                
                // 默认返回白色背景
                return EvenRowColor;
            }
            catch
            {
                // 出现异常时返回默认背景色
                return EvenRowColor;
            }
        }

        /// <summary>
        /// 反向转换（未实现）
        /// </summary>
        public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}